//! + 使用pin_project_lite：
//!   - 结构体包含需要固定的字段（如Future）和普通字段。
//!   - 需要安全地访问部分字段的Pin<&mut T>，同时修改其他字段。
//!   - 常见于实现自定义Future或涉及自引用结构的场景。
//! + 使用pin!或Box::pin：
//!   - 固定简单值（如基本类型）或整个结构体无需字段级控制。
//!   - 快速固定栈或堆上的值，无需额外依赖。
//! 
use std::fmt::Debug;
use std::pin::{Pin, pin};

use pin_project_lite::pin_project;

pin_project! {
    struct Struct<T: Debug, U: Debug> {
        #[pin]
        pinned: T,
        unpinned: U,
    }
}

impl<T: Debug, U: Debug> Struct<T, U> {
    fn method(self: Pin<&mut Self>) {
        let this = self.project();
        let pinned: Pin<&mut T> = this.pinned; // 对字段的固定引用
        let unpinned: &mut U = this.unpinned; // 对字段的正常引用
        println!("{:?}, {:?}", pinned, unpinned);
    }
}
fn main() {
    let s = pin!(Struct {
        pinned: 5,
        unpinned: 7,
    });
    s.method()
}
